package com.itheima.d5_generics;

import HomeWork.Demo02.Student;

import java.util.ArrayList;

/*
    1 泛型
         定义类、接口、方法时，同时声明了一个或者多个类型变量（如：<E>） ，称为泛型类、泛型接口，泛型方法、它们统称为泛型。
    2 作用：泛型提供了在编译阶段约束所能操作的数据类型，并自动进行检查的能力！这样可以避免强制类型转换，及其可能出现的异常。
    3 泛型的本质：把具体的数据类型作为参数传给类型变量。

 */
public class Test1 {
    public static void main(String[] args) {
        new StudentImpl().listAll(new ArrayList<StudentImpl>());
        new TeacherImpl().listAll(new ArrayList<TeacherImpl>());
    }
}

interface DataOperator<E>{

    void listAll(ArrayList<E> e);

    void listAvg(ArrayList<E> e);

}

class StudentImpl implements DataOperator<StudentImpl>{

    @Override
    public void listAll(ArrayList<StudentImpl> e) {
        System.out.println("studentlist");
    }

    @Override
    public void listAvg(ArrayList<StudentImpl> e) {
        System.out.println("studentavg");
    }
}

class TeacherImpl implements DataOperator<TeacherImpl>{

    @Override
    public void listAll(ArrayList<TeacherImpl> e) {
        System.out.println("teacherlist");
    }

    @Override
    public void listAvg(ArrayList<TeacherImpl> e) {
        System.out.println("teacheravg");
    }
}



